Pest’датый фреймворк для тестирования

Забанов Александр

О себе

Забанов Александр

Что обсудим?

Кто пишет тесты?

Проблема % покрытия тестами

Для чего нужны автотесты

PHPUnit

Популярный фреймворк для модульного тестирования на языке PHP

Что такое Pest?

Pest

"Фреймворк для тестирования, ориентированный на простоту и тщательно разработанный для того, чтобы вернуть радость тестирования на PHP."
© Контент-менеджер Pest

Сообщество Pest

Преимущества Pest

Синтаксическйи сахар


PHPUnit

Pest

Скорость

PhpUnit: 00:02.51

Скорость

Pest: 00:02.89

Должен жить лишь один

Обратной совместимости нет

Миграция с PHPUnit

  1. Ставим pestphp/pest-plugin-drift
  2. Запускаем
  3. Дрифтим

Миграция с PHPUnit

Работает только на 2ой версии Pest

Запуск

Запуск однопоточного тестирования

Запуск параллельного тестирования

Структура

Pest ломает Package by Feature (подход к организации кода)
├── 📂 tests
│   ├── 📂 Unit
│   │   └── ExampleTest.php
│   └── 📂 Feature
│   │   └── ExampleTest.phpL
│   └── TestCase.php
│   └── Pest.php
├── phpunit.xml

Файл конфигурации Pest.php


Пример конфигурации для встроенной функции интеграции в таск менеджер

Плагины для редакторов кода

Наименование

Раньше: [ТестирумыйМетод]_[Сценарий]_[ОжидаемыйРезультат]
Пример:

Сейчас: [Любой текст]
Пример:

Группы

Для разделения единиц поведения

Запуск

Skip

Если вам нужно временно отключить тест.

Хуки

Mocking

Нужно будет установить библиотеку для моков. Pest рекомендует mockery

Higher Order Testing

Удобный билдер, в котором доступны как методы Pest так и PHPUnit

субъект-действие-объект

Архитектурные тесты

Проверяют, соответствует ли ваше приложение набору архитектурных правил

Пресеты

Уже готовые наборы правил

Стресс-тестирование

*Доп плагин с К6 под капотом

Флаги
--duration
--concurrenc
Http-флаги (--patch --put --post --options --patch --post)

Функции стресс теста

Результаты стресс-теста

Покрытие

Type Coverage

Mетрика, используемая для измерения процента типизации кода
Ставим плагин pestphp/pest-plugin-type-coverage

Mutation Testing

Требуется XDebug 3.0+ или PCOV .

Snapshot


При первом запуске этого теста он создаст файл снимка - tests/.pest/snapshots с содержимым ответа. При следующем запуске теста он сравнит ответ с файлом снимка

Для динамических данных

TODOS

Тесты можно использовать для отслеживания хода выполнения ваших todos/задач

Назначение задач

PR

Issue

Note

Все вместе

Выводы

Недостатки Pest

Когда стоит\не стоит ;( использовать Pest

Когда стоит использовать Pest:

Когда стоит\не стоит ;( использовать Pest

Когда не стоит использовать Pest:

Наш опыт

Благодарности

 ______  __                                        __
/\__  _\/\ \                                      /\ \
\/_/\ \/\ \ \___       __          __     ___     \_\ \
   \ \ \ \ \  _ `\   /'__`\      /'__`\ /' _ `\   /'_` \
    \ \ \ \ \ \ \ \ /\  __/     /\  __/ /\ \/\ \ /\ \L\ \
     \ \_\ \ \_\ \_\\ \____\    \ \____\\ \_\ \_\\ \___,_\
      \/_/  \/_/\/_/ \/____/     \/____/ \/_/\/_/ \/__,_ /